/**
 * 缓存数据与循环体优化
 *  + 减少声明和语句数（词法 语法）
 *  + 缓存数据（作用域链查找更快）
 */
const arr = Array(1000).fill(3)
// 循环体优化，将循环体内多次用到的length属性保存
for (let i = 0; i < arr.length; i++) {
  console.log(i)
  console.log(arr.length)
}
const len = arr.length;
for (let i = 0; i < len; i++) {
  console.log(i);
  console.log(len)
}
// 循环体终极优化，while从后往前遍历
while (len--) {
  console.log(i);
  console.log(len)
}

/**
 * 减少访问层级
 */
function Person() {
  this.name = 'tom'
  this.age = 26
  this.getAge = function () {
    return this.age
  }
}
let p1 = new Person()
console.log(p1.age)
console.log(p1.getAge())

/**
 * 字面量与构造式，字面量比构造式的速度更快，尤其是基本数据类型声明时
 */
var test1 = () => {
  let obj = new Object()
  obj.name = 'tom'
  obj.age = 32
  obj.slogan = 'haha'
}
var test2 = () => {
  let obj = {
    name: 'tom',
    age: 32,
    slogan: 'haha',
  }
}

var str1 = 'hahah'
var str2 = new String('hahah')
